bitkeeper revision 1.259.2.4 (3f0ad7d2Xbie4GTSEifzISudDA3zQw)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 8 Jul 2003 14:40:18 +0000 (14:40 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 8 Jul 2003 14:40:18 +0000 (14:40 +0000)
get_unmapped_area.c, dom0_memory.c, dom0_core.c:
  Fix embarrassing bug in fix to auto direct-unmap.

xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c
xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_memory.c
xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c

index 3377c3b3a6672bd9aad6d200047138172094c2e9..5abc05d05fc2d53c473efc21ee3401e6fef3de82 100644 (file)
@@ -51,7 +51,7 @@ static struct proc_dir_entry *proc_ft;
 static struct proc_dir_entry *dom_list_intf;
 
 unsigned long direct_mmap(unsigned long, unsigned long, pgprot_t, int, int);
-int direct_unmap(unsigned long, unsigned long);
+int direct_unmap(struct mm_struct *, unsigned long, unsigned long);
 
 static unsigned char readbuf[1204];
 
@@ -160,7 +160,7 @@ static ssize_t dom_mem_write(struct file * file, const char * buff,
     
     copy_from_user(&mem_data, (dom_mem_t *)buff, sizeof(dom_mem_t));
     
-    if ( direct_unmap(mem_data.vaddr, 
+    if ( direct_unmap(current->mm, mem_data.vaddr, 
                       mem_data.tot_pages << PAGE_SHIFT) == 0 ) {
         return sizeof(sizeof(dom_mem_t));
     } else {
index 8b1ffcd5f35b3bfa5bdb464b5764dd425d772684..7f28b37df64259cb399cab522e75fbd765147d53 100644 (file)
@@ -311,12 +311,12 @@ void direct_zap_page_range(struct mm_struct *mm, unsigned long address, unsigned
 }
 
 
-int direct_unmap(unsigned long addr, unsigned long size)
+int direct_unmap(struct mm_struct *mm, unsigned long addr, unsigned long size)
 {
     int count = 0, tot_pages = (size+PAGE_SIZE-1) >> PAGE_SHIFT;
     direct_mmap_node_t * node;
     struct list_head * curr;
-    struct list_head * direct_list = &current->mm->context.direct_list;    
+    struct list_head * direct_list = &mm->context.direct_list;    
 
     curr = direct_list->next;
     while ( curr != direct_list )
@@ -335,7 +335,7 @@ int direct_unmap(unsigned long addr, unsigned long size)
 
     while ( count < tot_pages )
     {
-        direct_zap_page_range(current->mm, addr, PAGE_SIZE);
+        direct_zap_page_range(mm, addr, PAGE_SIZE);
         addr += PAGE_SIZE;
         count++;
     }
index c4b322f9bc6f433cc0af8935fdb070d673b8ef0d..2258d0160b5f2e6d6c3df1747bbb32c5b322e8df 100644 (file)
@@ -14,8 +14,7 @@
 #include <asm/uaccess.h>
 #include <asm/pgalloc.h>
 
-extern int direct_unmap(unsigned long, unsigned long);
-
+extern int direct_unmap(struct mm_struct *, unsigned long, unsigned long);
 
 int init_direct_list(struct mm_struct *mm)
 {
@@ -30,7 +29,7 @@ void destroy_direct_list(struct mm_struct *mm)
     while ( (curr = direct_list->next) != direct_list )
     {
         direct_mmap_node_t *node = list_entry(curr, direct_mmap_node_t, list);
-        if ( direct_unmap(node->vm_start, node->vm_end - node->vm_start) != 0 )
+        if ( direct_unmap(mm, node->vm_start, node->vm_end - node->vm_start) )
             BUG();
     }
 }